#pragma once 
#include<cstring>
#include<string>

using namespace std;

string oprs="+-*/%";

enum 
{
    DivZero=1,ModZero,Unknown
};

class task
{
public:
    task(){}
    task(int x,int y,char opr):_data1(x),_data2(y),_opr(opr)
    {
        _exitcode=0;
    }
    void run()
    {
        switch(_opr)
        {
            case '+':
            {
                _result=_data1+_data2;
                break;
            }
            case '-':
            {
                _result=_data1-_data2;
                break;
            }
            case '*':
            {
                _result=_data1*_data2;
                break;
            }
            case '/':
            {
                if(_data2==0)
                _exitcode=DivZero,_result=0;
                else 
                _result=_data1/_data2;
                break;
            }
            case '%':
            {
                if(_data2==0)
                _exitcode=ModZero,_result=0;
                else 
                _result=_data1%_data2;
                break;
            }
            default:
                _exitcode=Unknown;
                break;
        }
    }

    string GetTask()
    {
        string ret=to_string(_data1);
        ret+=_opr;
        ret+=to_string(_data2);
        ret+="=?";

        return ret;
    }

    string GetResult()
    {
        string ret=to_string(_data1);
        ret+=_opr;
        ret+=to_string(_data2);
        ret+="=";
        ret+=to_string(_result);

        ret+="[code:";
        ret+=to_string(_exitcode);
        ret+="]";

        return ret;
    }

public:
    int _data1;
    int _data2;
    int _result;

    char _opr;
    int _exitcode;
};